package com.example.dqhl.recycleviewdemo.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.example.dqhl.recycleviewdemo.R;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class RxJavaActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rx_java);
//        initData();
        initView();
    }

    private void initView() {
        //创建被观察者 observable  生产事件


        //1、创建被观察者 Observable对象
        Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            // oncreate 是RxJava最基本的 创造时间序列的方法
            // 此处传入一个 OnSubscribe 对象参数
            // 当Observable 被订阅时，OnSubscribe 的 call（）方法会自动被调用，即事件序列就会依照设定依次被触发
            // 即观察者会依次调用对应事件的复写方法从而响应事件
            //从而实现被观察者调用了观察者的回调方法&由被观察者想观察者的时间传递。即观察者模式

            // 2、 在复写的subscribe（） 里定义需要发送的事件
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                // 通过 ObservableEmitte类对象产生事件并通知观察者
                /**
                 *  ObservableEmitter 类介绍
                 *
                 *   1、 定义：事件 发射器
                 *
                 *   2、 作用：定义需要发送的事件&向观察者发送事件
                 **/
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
                emitter.onComplete();
            }
        });

    }

    private void initData() {
        // RxJava的流式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {
            // 1. 创建被观察者 & 生产事件
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
                emitter.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            // 2. 通过通过订阅（subscribe）连接观察者和被观察者
            // 3. 创建观察者 & 定义响应事件的行为
            @Override
            public void onSubscribe(Disposable d) {
                Log.d("GG", "开始采用subscribe连接");
            }

            // 默认最先调用复写的 onSubscribe（）
            @Override
            public void onNext(Integer value) {
                Log.e("GG", "对Next事件" + value + "作出响应");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("GG", "对Error事件作出响应");
            }

            @Override
            public void onComplete() {
                Log.e("GG", "对Complete事件作出响应");
            }
        });
    }
}
